<?php

namespace app\admin\controller\workorder;

use think\Db;
use Exception;
use think\exception\PDOException;
use app\common\controller\Backend;
use app\admin\model\workorder\Category;

/**
 * 知识库管理
 */
class Kbs extends Backend
{

    /**
     * Kbs模型对象
     * @var \app\admin\model\workorder\Kbs
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\workorder\Kbs();
        $this->view->assign("statusList", $this->model->getStatusList());
    }

    public function import()
    {
        parent::import();
    }


    /**
     * 查看
     */
    public function index()
    {
        // 当前是否为关联查询
        $this->relationSearch = true;
        // 设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if ($this->request->isAjax()) {
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $filter         = $this->request->get("filter", '');
            $filter         = (array)json_decode($filter, true);
            $filter         = $filter ?: [];
            $category_where = [];
            if (array_key_exists('category_id', $filter)) {
                $category_kbs_ids         = Category::where('id', $filter['category_id'])->value('kbs_ids');
                $category_where['kbs.id'] = ['in', $category_kbs_ids];
            }

            $total = $this->model->with(['category'])
                ->where($where)
                ->where($category_where)
                ->order($sort, $order)
                ->count();

            $list   = $this->model->with(['category'])
                ->where($where)
                ->where($category_where)
                ->order($sort, $order)
                ->limit($offset, $limit)
                ->select();
            $domain = $this->request->domain();

            foreach ($list as $row) {
                $row->url = $row->url ?: $domain . '/index/workorder/kbs?id=' . $row->id;
            }
            $list   = collection($list)->toArray();
            $result = ["total" => $total, "rows" => $list];

            return json($result);
        }

        $categoryList = [];
        $categorys    = Category::order("weigh desc,id desc")->select();
        foreach ($categorys as $category) {
            $categoryList[] = [
                'id'     => $category->id,
                'parent' => $category->pid ?: '#',
                'text'   => $category->name,
                'state'  => ['opened' => true, 'disabled' => !$category->pid],
                'type'   => $category->pid ? 'list' : 'none'
            ];
        }

        $this->assignconfig('categoryList', $categoryList);
        return $this->view->fetch();
    }

    /**
     * 真实删除
     */
    public function destroy($ids = "")
    {
        if (!$this->request->isPost()) {
            $this->error(__("Invalid parameters"));
        }
        $ids      = $ids ?: $this->request->post("ids");
        $pk       = $this->model->getPk();
        $adminIds = $this->getDataLimitAdminIds();
        if (is_array($adminIds)) {
            $this->model->where($this->dataLimitField, 'in', $adminIds);
        }
        if ($ids) {
            $this->model->where($pk, 'in', $ids);
        }
        $count = 0;
        Db::startTrans();
        try {
            $list = $this->model->onlyTrashed()->select();
            foreach ($list as $v) {
                $count += $v->delete(true);
                $this->model->catDelKbs($v->category_id, $v->id);
            }
            Db::commit();
        } catch (PDOException|Exception $e) {
            Db::rollback();
            $this->error($e->getMessage());
        }
        if ($count) {
            $this->success();
        } else {
            $this->error(__('No rows were deleted'));
        }
    }
}
